/**
 * Classe cherchant les meilleurs approximations
 * @author Marie-Hélène Goddet, Damien Finck, Cédric Schaller
 * 
 */

package fastwriting;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import utils.Debug;

public class Choix {
	
	private List<MotProbable> motsProbables;
	private boolean isMajDebut;

	/**
	 * Trouve la meilleure approximation 
	 * @param word le mot saisi
	 * @param dico le dictionnaire a utiliser
	 * @return la chaîne de caractère à afficher ou "" si il n'y a pas de mots possibles
	 */
	public String getBest(MotSaisi word, Dico dico)
	{
		double max = -10;
		String res ="";
		Debug.addLog("Debut de recherche : "+word, Debug.LOG_INFO, "mh");
		word.endWriting();
		if (word.size()==1){
			motsProbables = new ArrayList<MotProbable>();
			return word.toString();
		} else {
			List<MotProbable> probables = dico.searchDicoPrototype(word);
			motsProbables = probables;
			for (MotProbable mot : probables) {
				Debug.addLog(mot+" "+mot.getProba(), Debug.LOG_INFO, "proba");
				if (mot.getProba()>max){
					max = mot.getProba();
					res = mot.toString();
				}
			}
			this.isMajDebut = word.isMajDebut();
			if (res.length()>0 && isMajDebut) res = res.substring(0,1).toUpperCase() + res.substring(1);
			word.setMajDebut(false);
			Debug.addLog("Fin de recherche : "+res+" trouvé.", Debug.LOG_INFO, "mh");
			return(res);
		}
	}
	
	/**
	 * Récupère la liste de 7 autres solutions
	 * @return une liste de 7 propositions ou moins s'il n'y a pas assez de possibilités
	 */
	public List<String> get7NextBest() {
		int i = 0;
		List<String> res = new ArrayList<String>();
		String mot;
		Collections.sort(motsProbables, Collections.reverseOrder()); //Tri
		while (i<=6 && i<motsProbables.size()){
			mot = motsProbables.get(i).toString();
			if (mot.length()>0 && isMajDebut) mot = mot.substring(0,1).toUpperCase() + mot.substring(1);
			res.add(mot);
			i++;
		}
		return(res);
	}
	
	/**
	 * Après l'utilisation de get7NextBest(), retourne 7 autres propositions.
	 * @return Une liste de 7 propositions ou moins s'il n'y a pas assez de possibilités
	 */
	public List<String> get7NextOther() {
		int i = 7;
		List<String> res = new ArrayList<String>();
		while (i<=13 && i<motsProbables.size()){
			res.add(motsProbables.get(i).toString());
			i++;
		}
		return(res);
	}
}